package com.peng.scalatest

import scala.collection.immutable

/**
 * 流程控制
 */
object ScalaTest2_IF_WHILE_FOR {
  def main(args: Array[String]): Unit = {
    //while循环的不同
    //    var a = 3;
    //    while (a > 0) {
    //      a--; 不支持这样写
    //      a -= 1;
    //    }
    //    println(a)

    //for循环

    //    val inclusive = 1 to 10 //包含终止
    //    val range = 1 until 10 //不包含终止
    //
    //    val step = 1 to(10, 2) //指定步长
    //    println(inclusive) //Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    //    println(range)//Range(1, 2, 3, 4, 5, 6, 7, 8, 9)
    //    println(step) //Range(1, 3, 5, 7, 9)

    //循环迭代器
    //    for( i <- inclusive){
    //      println(i)
    //    }
    //
    //
    //    for( i <- inclusive if i!=3){
    //      println(i)
    //    }

    //99乘法表 scala版  多层循环分号隔开   最后面可以加一个判断式
    //    for(i <- 1 to 9; j<- 1 to 9  if j<=i){
    //      print(s"$i * $j = ${i*j}   ")
    //      if(i==j)println()
    //    }

    //yield 收集循环结果到一个集合
    val indexedSeq: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield i + 3
    //将yield最后一行的结果进行收集
    val indexedSeq2: immutable.IndexedSeq[Int] = for (i <- 1 to 10) yield {
      var a = 20
      a
    }
    //    println(indexedSeq)
    //    println(indexedSeq2)

    //yield 关键字的简短总结:
    //针对每一次 for 循环的迭代, yield 会产生一个值，被循环记录下来 (内部实现上，像是一个缓冲区).
    //当循环结束后, 会返回所有 yield 的值组成的集合.
    //返回集合的类型与被遍历的集合类型是一致的.
    val ints = List(1, 2, 3, 4, 5)

    val iterator: Iterator[Int] = ints.iterator //  类型为Iterator[Int]
    val yieldRes: Iterator[Int] = for (elem <- iterator if elem > 3 if elem != 2) yield elem //  返回类型也为Iterator[Int]
    yieldRes.foreach(println)


  }


}

